const INVALID_TICKET_NUMS = ["无", "--", "0", "", "-"]; // 定义所有被认为是“无票”的无效值
/**
 * 筛选有余票的车次，并按照指定格式返回。
 * @param {Array} originalResults - 原始的火车票查询结果数组。
 * @param {string} queryName - 查询组的名称，例如 "深圳-潜山"。
 * @param {string} searchDate - 查询的日期，格式为 "YYYY-MM-DD"。
 *  @param {Array} trains - 需要筛选的车次数组，例如 ["G2694"]。
 * @returns {Array} - 格式化后的、包含有余票信息的数组。
 */
export function formatAvailableTickets(
  originalResults,
  queryName,
  searchDate,
  trains
) {
  if (!Array.isArray(originalResults)) {
    console.error("Invalid originalResults: not an array");
    return [];
  }
  originalResults = originalResults.filter((train) =>
    trains.includes(train.车次)
  );
  // 定义所有被认为是“无票”的无效值
  const formattedList = [];

  // 遍历原始查询结果中的每一条车次信息
  for (const item of originalResults) {
    const availableSeats = {};

    // 遍历该车次的“票列表”
    for (const ticketType in item.票列表) {
      if (Object.hasOwnProperty.call(item.票列表, ticketType)) {
        const ticketInfo = item.票列表[ticketType];

        // 检查票数（num）是否为有效值
        if (!INVALID_TICKET_NUMS.includes(ticketInfo.num)) {
          // 如果有效，则将席位和票数存入 availableSeats 对象
          // .trim() 用于去除 "优 选一等座" 等键名中可能存在的空格
          availableSeats[ticketType.trim()] = ticketInfo.num;
        }
      }
    }

    // 如果 availableSeats 对象不为空，说明该车次有余票
    if (Object.keys(availableSeats).length > 0) {
      // 按照指定的格式创建新的对象，并添加到结果列表中
      formattedList.push({
        查询组: queryName,
        日期: searchDate,
        车次: item.车次,
        出发地: item.出发站,
        到达地: item.到达站,
        出发时间: item.出发时间,
        到达时间: item.到达时间,
        余票席位: availableSeats,
      });
    }
  }

  return formattedList;
}
